/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package chess;

import   java.awt.*;
import   java.awt.event.*;
import javax.swing.*;

/**
 *
 * @author houfukude
 */
 //创建棋盘的类：
 public class   ChessPad   extends   Panel     implements   MouseListener,ActionListener
  {
      int   x=-1,y=-1,   棋子颜色=1;                      //控制棋子颜色的成员变量。
      Button   button = new   Button("重新开局");         //控制重新开局的按扭。
      TextField   text_1=new   TextField("请黑棋下子");
      TextField   text_2=new   TextField();     //提示下棋的两个文本框。
      ChessPad()
      {
          setSize(440,440);//设置棋盘大小
          setLayout(null);//使用默认布局管理
          setBackground(Color.pink);//设置颜色 粉
          addMouseListener(this);//监听这个面板
          add(button);//在面板中增加按钮
          button.setBounds(10,5,60,26);//设置按钮的大小位置
          button.addActionListener(this);//监听这个按钮
          add(text_1);
          text_1.setBounds(90,5,90,24);
          add(text_2);
          text_2.setBounds(290,5,90,24);
          text_1.setEditable(false);
          text_2.setEditable(false);
      }
    @Override
    public   void   paint(Graphics   g)                    //绘制围棋棋盘的外观。
    {
        for(int i = 40 ; i <= 380 ;i = i + 20)//绘制棋盘的外观。。。。
        {
            g.drawLine(40,i,400,i);
        }
        g.drawLine(40,400,400,400);
        for(int j = 40 ; j <= 380 ;j = j + 20)
        {
            g.drawLine(j,40,j,400);
        }
        g.drawLine(400,40,400,400);//标注 五个定位点
        g.fillOval(97,97,6,6);
        g.fillOval(337,97,6,6);
        g.fillOval(97,337,6,6);
        g.fillOval(337,337,6,6);
        g.fillOval(217,217,6,6);
      }
    public void mousePressed(MouseEvent e)           //当按下鼠标左键时下棋子。
      {   
        int win = 2;
        if(e.getModifiers()==InputEvent.BUTTON1_MASK)//监听到鼠标左键点击事件
          {
              x=(int)e.getX();
              y=(int)e.getY();       //获取按下鼠标时的坐标位置。
              System.out.println("y:" + x +" x:" + y);
              ChessPoint_black//分别创建一个黑白子
                      chesspoint_black=new   ChessPoint_black(this);
              ChessPoint_white
                      chesspoint_white=new   ChessPoint_white(this);
              int a = ( x + 10)/20,b=( y + 10)/20;//获得坐标对应的棋盘网格位置
              whowin now = new whowin();
            if(a<2||b<2||a>20||b>20)     //棋盘以外不下棋子。
                    {}
            else{
                  if(棋子颜色==1)                      //当棋子颜色是1时下黑棋子。
                  {
                      this.add(chesspoint_black);
                      //try{
                       // win= now.whowin(a, b, 棋子颜色);//可以不建立Exception
                          //先执行whowin再setbounds 可以直接判断落子的结果 错误还是 胜利
                  //}catch(inputException e1){

                     // }
                      chesspoint_black.setBounds(a*20-7,b*20-7,16,16);
                      win = now.whowin(a,b,棋子颜色);
                      棋子颜色=棋子颜色*(-1);
                      text_2.setText("请白棋下子");
                      text_1.setText("");
                      System.out.println("black " + a +" " + b);      
                      System.out.println(win);
                      
                  }
                  else
                      if(棋子颜色==-1)                //当棋子颜色是-1时下白棋子。
                      {
                          this.add(chesspoint_white);
                          chesspoint_white.setBounds(a*20-7,b*20-7,16,16);                          
                          win = now.whowin(a,b,棋子颜色);
                          棋子颜色=棋子颜色*(-1);
                          text_1.setText("请黑棋下子");
                          text_2.setText("");
                          System.out.println("white " + a +" " + b);
                          System.out.println(win);
                          }
                      }
                  }
        switch(win){
            case 1:{blackwin();break;}//如果返回1 说明黑子胜利
            case -1:{whitewin();break;}//如果返回的是-1 说明白子胜利
            case 2:{errorinput();break;}//如果返回的是2 说明当次落子错误
            default :;
          }
      }
    public   void   mouseReleased(MouseEvent   e){}
    public   void   mouseEntered(MouseEvent   e)   {}
    public   void   mouseExited(MouseEvent   e)   {}
    public   void   mouseClicked(MouseEvent   e){}
    public   void   actionPerformed(ActionEvent   e){
        restart();//重新开始方法

    }

    private void blackwin() {//黑子胜利
        System.out.println("black win");
        JOptionPane.showMessageDialog(new JFrame(),
                        "执黑子选手获胜！\n"+
                        "Email:KuageDMAC@GMAIL.COM\n"
                        +"Copyright © 1995-2009 KuageD Inc.\n"
                        +"保留一切权利。",
                        "恭喜",
                        JOptionPane.PLAIN_MESSAGE);
        restart();
        //throw new UnsupportedOperationException("Not yet implemented");
    }

    private void whitewin() {//白子胜利
        System.out.println("white win");
        JOptionPane.showMessageDialog(new JFrame(),
                        "执白子选手获胜！\n"+
                        "Email:KuageDMAC@GMAIL.COM\n"
                        +"Copyright © 1995-2009 KuageD Inc.\n"
                        +"保留一切权利。",
                        "恭喜",
                        JOptionPane.PLAIN_MESSAGE);
        restart();
        //throw new UnsupportedOperationException("Not yet implemented");
    }

    private void errorinput() {
        System.out.println("error");
        //throw new UnsupportedOperationException("Not yet implemented");
    }

    public void restart() {//重新摆棋盘

        this.removeAll();棋子颜色=1;
        add(button);
        button.setBounds(10,5,60,26);
        add(text_1);
        text_1.setBounds(90,5,90,24);
        text_2.setText("");
        text_1.setText("请黑棋下子");
        add(text_2);
        text_2.setBounds(290,5,90,24);
        //throw new UnsupportedOperationException("Not yet implemented");
    }


  }
